<?php

/**
 * Model_Post

 * @package    Model
 * @author     Windy
 */

class Model_Post extends Zend_Db_Table_Abstract
{
	protected $_name = "post";
	protected $_referenceMap = array(
		"Author" => array(
			"columns" 		=> "user_id",
			"refTableClass" => "Model_User",
			"refColumns"	=> "id"
		),
		"Category" => array(
			"columns"		=> "category_id",
			"refTableClass" => "Model_Category",
			"refColumns"	=> "id"
		)
	);
	/**
	 * 
	 * Tạo bài viết/ sản phẩm mới
	 * @param string $title
	 * @param string $summary
	 * @param string $content
	 * @param datetime $created_date
	 * @param int $user_id
	 * @param string $slug
	 * @param string $feature_image
	 * @param string $type
	 * @param int $category_id
	 * @param string $tag
	 * @return int Mã bài viết
	 */
	function insertPost($title, $summary, $content, $created_date, $user_id, $slug, $feature_image , $type='article', $category_id, $page_title, $page_description, $tag ){
		$post = $this->createRow();
		$post->title = $title;
		$post->summary = $summary;
		$post->content = $content;
		$post->created_date = $created_date;
		$post->user_id = $user_id;
		$post->slug = $slug;
		$post->feature_image = $feature_image;
		$post->type = $type;
		$post->category_id = $category_id;
		$post->page_title = $page_title;
		$post->page_description = $page_description;
		$post->tag = $tag;
		$post->save();
		$id = $this->_db->lastInsertId();
		return $id;
	}
	/**
	 * Đếm số lượng post trong bảng
	 * @return int total-post
	 */
	function countPost(){
		 $select = $this->_db->select()->from('post',array("COUNT(post.id) as total"));
		 return $this->_db->fetchOne($select);
		
	}
	/**
	 * Đếm số lượng post có type là page
	 */
	function countPage(){
		 $select = $this->_db->select()->from('post',array("COUNT(post.id) as total"))->where("type = 'page'");
		 return $this->_db->fetchOne($select);
	}
	/**
	 * Đếm số lượng post có $id_category nào đó
	 * @param int $id_category
	 * @return int $postInCategory
	 */
	function countPostInCategory($category_id){
		$select = $this->_db->select()->from('post',array("COUNT(post.id) as total"))->where("category_id = ".$category_id);
		 return $this->_db->fetchOne($select);
	}
	/**
	 * 
	 * Lấy toàn bộ các bài viết
	 * @return Zend_Db_Table_Rowset
	 */
	function getAllArticles(){
		return $this->fetchAll($this->select()->where('type = ?', 'article'));
	}
	/**
	 * 
	 * Lấy toàn bộ các trang
	 * @return Zend_Db_Table_Rowset
	 */
	function getAllPages(){
		return $this->fetchAll($this->select()->where('type = ?', 'page'));
	}
	
	/**
	 * 
	 * Lấy bài viết  theo id
	 * @param int $id
	 * @return Zend_Db_Table_Row
	 */
	function getPostByID($id){
		return $this->find($id)->current();
	}
	/**
	 * Lấy bài viết theo category_id
	 * @param int $category_id
	 * @return Zend_Db_Table_Rowset
	 */
	function  getPostByCategory_ID($category_id)
	{
		return $this->fetchAll($this->select()->where('category_id = ?', $category_id));
	}
	/**
	 * 
	 * Lấy bài viết theo slug
	 * @param string $slug
	 * @return Zend_Db_Table_Row
	 */
	function getPostBySlug($slug){
		return $this->fetchRow($this->select()->where('slug = ?',$slug));
	}
	/**
	 * 
	 * Lấy các bài viết liên quan tới bài viết hiện tại
	 * @param Zend_Db_Table_Row $post Bài post hiện tại
	 * @param int $num Số bài viết liên quan muốn lấy
	 */
	function getRelatePosts($post, $num = 10){
		return $this->fetchAll($this->select()->where('category_id =?', $post->category_id)->where('id <> ?', $post->id)->limit($num));
	}
	
	/**
	 * 
	 * Update thông tin post
	 * @param int $id Mã post
	 * @param string $title Tiêu đề
	 * @param string $summary Tóm tắt
	 * @param string $content Nội dung
	 * @param string $slug Url hiển thị
	 * @param string $feature_image Ảnh đại diện
	 * @param int $category_id Mã chuyên mục
	 * @param string $tag Thẻ cho bài viết
	 * @return int Số các bản ghi
	 */
	function updatePost($id, $title, $summary, $content, $slug, $feature_image , $category_id, $page_title, $page_description, $tag){
		try{
			$result = $this->update(
									array(
										'title' 			=> $title,
										'summary' 			=> $summary,
										'content' 			=> $content,
										'slug'	 			=> $slug,
										'feature_image' 	=> $feature_image,
										'category_id'		=> $category_id,
										'page_title'		=> $page_title,
										'page_description'		=> $page_description,
										'tag'				=> $tag
									),
									'id = '.$id
								);
			return true;
		}catch(Exception $ex){
			echo "Caught exception: ".$ex->getMessage();
			return false;
		}
	}
	function deletePost($id){
		if(is_numeric($id)){
			return $this->delete('id = '. $id );
		}else{
			return $this->delete('id in ('.$id.')');
		}
	}
}